<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 有时需要将现有对象转为promise对象，Promise.resolve方法就可以
    var a = {name: '姚思远'}
    var p = Promise.resolve(a)
    console.log(p)// 就和proxy包装对象一样，这里是用Promise对其进行了一次封装
    // 等价于下面的写法
    var p1 = new Promise(resolve => resolve(a))
    console.log(p1)
    var p2 = Promise.resolve(p)
    console.log(p2)
    console.log(p === p2) // true 地址都是一样的
   /**
    * 1. 如果参数是promise实例，那么Promise.resolve将不做任何修改，原封不动的返回这个实例
    * 2. 参数是一个thenable对象，thenable对象是指具有then方法的对象，promise.resolve会将这个
    * 对象转为promise对象，然后立即执行thenable对象的then方法
   */
   var obj = {
     name: '姚思远',
     then() {
      // resolve(520)
      console.log('我是立即执行的')
     }
   }
   var p3 = Promise.resolve(obj) // 创建即执行obj的then方法
  //  console.log('p3', p3)
  // 3. 参数不具有then方法或者根本不是对象
  var p4 = Promise.resolve('姚思远')
  console.log('p4', p4)
  // 4. 不带参数
  var p5 = Promise.resolve() // Promise {<fulfilled>: undefined}
  console.log('p5', p5)
  // 需要注意的是，立即resolve()的Promise对象，是在本轮"事件循环"(event loop)的结束时执行
  // 而不是在下一轮"事件循环"的开始时
  </script>
</body>
</html>